正确理解自调用
name 是当前模块名,当模块被直接运行时模块名为 main 这句话的意思就是,当模块被直接运行时,以下代码块将被运行 当模块是被导入时,代码块不被运行可以理解为 if name == main 底下的是私有代码
来解释一下使用场景
通过 name的值,我们可以判断出该模块是作为脚本正在执行还是被其他模块导入,而根据这个判断,我们就可以选择性地执行代码。
比如我现在有两个py文件
,其中 one.py
文件运行的时候 函数模块one.py
是作为**脚本正在执行;
two.py
文件运行的时候,函数模块one.py
是被其他模块导入
one.py
:
1 | # file one.py |
two.py
:
1 | # file two.py |
如果你执行one.py文件,
1 | python one.py |
会输出:
1 | top-level in one.py |
如果你执行two.py文件,
1 | python two.py |
会输出:
1 | top-level in one.py #调用模块 程序顺序运行 |
再次强调
一个 Python 源码文件除了可以被直接运行外,还可以作为模块(也就是库)被导入。不管是导入还是直接运行,最顶层的代码都会被运行(Python 用缩进来区分代码层次)。而实际上在导入的时候,有一部分代码我们是不希望被运行的。因此,我们只要写一句
1 | if __name__=='__main__' |